package nsu.edu.zsq.bean;

import java.util.Date;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import org.springframework.format.annotation.DateTimeFormat;

import com.fasterxml.jackson.annotation.JsonFormat;

import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * Description: 学生信息表
 */
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    
    /**
     * 学生id stu_id
     */
    private Integer stuId;

    /**
     * 学号 stu_no
     */
    @Excel(name = "学号", orderNum = "0")
    @Pattern(regexp="^[\\S]{10}$", message="学号10位数字，且不能出现空格")
    private String stuNo;

    /**
     * 姓名 stu_name
     */
    @Excel(name = "*姓名", orderNum = "1")
    @Pattern(regexp="^[\\S]{2,15}$", message="姓名 2-15个字符，且不能出现空格")
    private String stuName;

    /**
     * 英文姓名 stu_ename
     */
    private String stuEname;

    /**
     * 身份证号 id_number
     */
    @Excel(name = "*身份证号", orderNum = "2")
    @Pattern(regexp="(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)", message="身份证号格式不正确")
    private String idNumber;

    /**
     * 登录密码 password
     */
    private String password;

    /**
     * 性别，1：女；2：男 stu_sex
     */
    @Excel(name = "*性别", orderNum = "3")
    @Min(value=1, message="性别格式不正确")
    @Max(value=2, message="性别格式不正确")
    private Integer stuSex;

    /**
     * 年龄 stu_age
     */
    private Integer stuAge;

    /**
     * 出生日期 stu_birth
     */
    @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
    // 入参时格式转换
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "*出生日期", orderNum = "4")
    @NotNull(message="出生日期不能为空")
    private Date stuBirth;

    /**
     * 政治面貌 politics
     */
    @Excel(name = "*政治面貌", orderNum = "5")
    @NotNull(message="政治面貌不能为空")
    private String politics;

    /**
     * 民族 nation
     */
    @Excel(name = "*民族", orderNum = "6")
    @Pattern(regexp="^[\\S]{1,10}$", message="民族1-5个字符，且不能出现空格")
    private String nation;

    /**
     * 毕业学校 graduate_school
     */
    @Excel(name = "毕业学校", orderNum = "8")
    @Pattern(regexp="^[\\S]{0,15}$", message="毕业学校0-15个字符，且不能出现空格")
    private String graduateSchool;

    /**
     * 籍贯 homeplace
     */
    @Excel(name = "*籍贯", orderNum = "7")
    @Pattern(regexp="^[\\S]{1,10}$", message="籍贯1-10个字符，且不能出现空格")
    private String homeplace;

    /**
     * 入学日期 start_time
     */
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    // 入参时格式转换
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "*入学日期", orderNum = "9")
    @NotNull(message="入学日期不能为空")
    private Date startTime;

    /**
     * 专业代码 major_no
     */
    @Excel(name = "*专业代码", orderNum = "10")
    private String majorNo;

    /**
     * 年级 grade
     */
    private String grade;

    /**
     * 院系 school_dep
     */
    @Excel(name = "*院系", orderNum = "11")
    private String schoolDep;

    /**
     * 学历 graduate_status
     */
    private String graduateStatus;

    /**
     * 学制 grade_length
     */
    @Excel(name = "*学制", orderNum = "12")
    @NotNull(message="学制不能为空")
    private String gradeLength;

    /**
     * 高考分数 exam_score
     */
    private String examScore;

    /**
     * 高考考生号 exam_id
     */
    private String examId;

    /**
     * 通讯地址 address
     */
    @Excel(name = "通讯地址", orderNum = "13")
    @Pattern(regexp="^[\\S]{0,20}$", message="通讯地址0-20个字符，且不能出现空格")
    private String address;

    /**
     * 手机号码 number
     */
    @Excel(name = "手机号码", orderNum = "14")
    @Pattern(regexp="^[\\S]{0,50}$", message="手机号码0-50个字符，且不能出现空格")
    private String number;

    /**
     * 寝室地址 bedroom_id
     */
    @Excel(name = "寝室地址", orderNum = "15")
    @Pattern(regexp="^[\\S]{0,10}$", message="寝室地址 0-10个字符，且不能出现空格")
    private String bedroomId;

    /**
     * 银行卡号 bank_card
     */
    private String bankCard;

    /**
     * 备注1 remark1
     */
    @Excel(name = "备注1", orderNum = "16")
    @Pattern(regexp="^[\\S]{0,50}$", message="备注 0-50个字符，且不能出现空格")
    private String remark1;

    /**
     * 备注2 remark2
     */
    private String remark2;

    /**
     * 是否被删除，1：是；0：否 is_delete
     */
    private Integer isDelete;

    /**
     * 排序号，默认1，降序排序 sort
     */
    @Excel(name = "*排序号", orderNum = "17")
    @Min(value=1,message="排序号格式不正确")
    @Max(value=99999,message="排序号格式不正确")
    private Integer sort;

    /**
     * 班级id，默认0，代表没有 class_id
     */
    private Integer classId;

    /**
     * 操作者 operator
     */
    private String operator;

    /**
     * 操作时间 operator_time
     */
    private Date operatorTime;

    /**
     * Get 学生id
     * @return stu_id 学生id
     */
    public Integer getStuId() {
        return stuId;
    }

    /**
     * Set 学生id
     * @param stuId 学生id
     */
    public void setStuId(Integer stuId) {
        this.stuId = stuId;
    }

    /**
     * Get 学号
     * @return stu_no 学号
     */
    public String getStuNo() {
        return stuNo;
    }

    /**
     * Set 学号
     * @param stuNo 学号
     */
    public void setStuNo(String stuNo) {
        this.stuNo = stuNo == null ? null : stuNo.trim();
    }

    /**
     * Get 姓名
     * @return stu_name 姓名
     */
    public String getStuName() {
        return stuName;
    }

    /**
     * Set 姓名
     * @param stuName 姓名
     */
    public void setStuName(String stuName) {
        this.stuName = stuName == null ? null : stuName.trim();
    }

    /**
     * Get 英文姓名
     * @return stu_ename 英文姓名
     */
    public String getStuEname() {
        return stuEname;
    }

    /**
     * Set 英文姓名
     * @param stuEname 英文姓名
     */
    public void setStuEname(String stuEname) {
        this.stuEname = stuEname == null ? null : stuEname.trim();
    }

    /**
     * Get 身份证号
     * @return id_number 身份证号
     */
    public String getIdNumber() {
        return idNumber;
    }

    /**
     * Set 身份证号
     * @param idNumber 身份证号
     */
    public void setIdNumber(String idNumber) {
        this.idNumber = idNumber == null ? null : idNumber.trim();
    }

    /**
     * Get 登录密码
     * @return password 登录密码
     */
    public String getPassword() {
        return password;
    }

    /**
     * Set 登录密码
     * @param password 登录密码
     */
    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    /**
     * Get 性别，1：女；2：男
     * @return stu_sex 性别，1：女；2：男
     */
    public Integer getStuSex() {
        return stuSex;
    }

    /**
     * Set 性别，1：女；2：男
     * @param stuSex 性别，1：女；2：男
     */
    public void setStuSex(Integer stuSex) {
        this.stuSex = stuSex;
    }

    /**
     * Get 年龄
     * @return stu_age 年龄
     */
    public Integer getStuAge() {
        return stuAge;
    }

    /**
     * Set 年龄
     * @param stuAge 年龄
     */
    public void setStuAge(Integer stuAge) {
        this.stuAge = stuAge;
    }

    /**
     * Get 出生日期
     * @return stu_birth 出生日期
     */
    public Date getStuBirth() {
        return stuBirth;
    }

    /**
     * Set 出生日期
     * @param stuBirth 出生日期
     */
    public void setStuBirth(Date stuBirth) {
        this.stuBirth = stuBirth;
    }

    /**
     * Get 政治面貌
     * @return politics 政治面貌
     */
    public String getPolitics() {
        return politics;
    }

    /**
     * Set 政治面貌
     * @param politics 政治面貌
     */
    public void setPolitics(String politics) {
        this.politics = politics == null ? null : politics.trim();
    }

    /**
     * Get 民族
     * @return nation 民族
     */
    public String getNation() {
        return nation;
    }

    /**
     * Set 民族
     * @param nation 民族
     */
    public void setNation(String nation) {
        this.nation = nation == null ? null : nation.trim();
    }

    /**
     * Get 毕业学校
     * @return graduate_school 毕业学校
     */
    public String getGraduateSchool() {
        return graduateSchool;
    }

    /**
     * Set 毕业学校
     * @param graduateSchool 毕业学校
     */
    public void setGraduateSchool(String graduateSchool) {
        this.graduateSchool = graduateSchool == null ? null : graduateSchool.trim();
    }

    /**
     * Get 籍贯
     * @return homeplace 籍贯
     */
    public String getHomeplace() {
        return homeplace;
    }

    /**
     * Set 籍贯
     * @param homeplace 籍贯
     */
    public void setHomeplace(String homeplace) {
        this.homeplace = homeplace == null ? null : homeplace.trim();
    }

    /**
     * Get 入学日期
     * @return start_time 入学日期
     */
    public Date getStartTime() {
        return startTime;
    }

    /**
     * Set 入学日期
     * @param startTime 入学日期
     */
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    /**
     * Get 专业代码
     * @return major_no 专业代码
     */
    public String getMajorNo() {
        return majorNo;
    }

    /**
     * Set 专业代码
     * @param majorNo 专业代码
     */
    public void setMajorNo(String majorNo) {
        this.majorNo = majorNo == null ? null : majorNo.trim();
    }

    /**
     * Get 年级
     * @return grade 年级
     */
    public String getGrade() {
        return grade;
    }

    /**
     * Set 年级
     * @param grade 年级
     */
    public void setGrade(String grade) {
        this.grade = grade == null ? null : grade.trim();
    }

    /**
     * Get 院系
     * @return school_dep 院系
     */
    public String getSchoolDep() {
        return schoolDep;
    }

    /**
     * Set 院系
     * @param schoolDep 院系
     */
    public void setSchoolDep(String schoolDep) {
        this.schoolDep = schoolDep == null ? null : schoolDep.trim();
    }

    /**
     * Get 学历
     * @return graduate_status 学历
     */
    public String getGraduateStatus() {
        return graduateStatus;
    }

    /**
     * Set 学历
     * @param graduateStatus 学历
     */
    public void setGraduateStatus(String graduateStatus) {
        this.graduateStatus = graduateStatus == null ? null : graduateStatus.trim();
    }

    /**
     * Get 学制
     * @return grade_length 学制
     */
    public String getGradeLength() {
        return gradeLength;
    }

    /**
     * Set 学制
     * @param gradeLength 学制
     */
    public void setGradeLength(String gradeLength) {
        this.gradeLength = gradeLength == null ? null : gradeLength.trim();
    }

    /**
     * Get 高考分数
     * @return exam_score 高考分数
     */
    public String getExamScore() {
        return examScore;
    }

    /**
     * Set 高考分数
     * @param examScore 高考分数
     */
    public void setExamScore(String examScore) {
        this.examScore = examScore == null ? null : examScore.trim();
    }

    /**
     * Get 高考考生号
     * @return exam_id 高考考生号
     */
    public String getExamId() {
        return examId;
    }

    /**
     * Set 高考考生号
     * @param examId 高考考生号
     */
    public void setExamId(String examId) {
        this.examId = examId == null ? null : examId.trim();
    }

    /**
     * Get 通讯地址
     * @return address 通讯地址
     */
    public String getAddress() {
        return address;
    }

    /**
     * Set 通讯地址
     * @param address 通讯地址
     */
    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }

    /**
     * Get 手机号码
     * @return number 手机号码
     */
    public String getNumber() {
        return number;
    }

    /**
     * Set 手机号码
     * @param number 手机号码
     */
    public void setNumber(String number) {
        this.number = number == null ? null : number.trim();
    }

    /**
     * Get 寝室地址
     * @return bedroom_id 寝室地址
     */
    public String getBedroomId() {
        return bedroomId;
    }

    /**
     * Set 寝室地址
     * @param bedroomId 寝室地址
     */
    public void setBedroomId(String bedroomId) {
        this.bedroomId = bedroomId == null ? null : bedroomId.trim();
    }

    /**
     * Get 银行卡号
     * @return bank_card 银行卡号
     */
    public String getBankCard() {
        return bankCard;
    }

    /**
     * Set 银行卡号
     * @param bankCard 银行卡号
     */
    public void setBankCard(String bankCard) {
        this.bankCard = bankCard == null ? null : bankCard.trim();
    }

    /**
     * Get 备注1
     * @return remark1 备注1
     */
    public String getRemark1() {
        return remark1;
    }

    /**
     * Set 备注1
     * @param remark1 备注1
     */
    public void setRemark1(String remark1) {
        this.remark1 = remark1 == null ? null : remark1.trim();
    }

    /**
     * Get 备注2
     * @return remark2 备注2
     */
    public String getRemark2() {
        return remark2;
    }

    /**
     * Set 备注2
     * @param remark2 备注2
     */
    public void setRemark2(String remark2) {
        this.remark2 = remark2 == null ? null : remark2.trim();
    }

    /**
     * Get 是否被删除，1：是；0：否
     * @return is_delete 是否被删除，1：是；0：否
     */
    public Integer getIsDelete() {
        return isDelete;
    }

    /**
     * Set 是否被删除，1：是；0：否
     * @param isDelete 是否被删除，1：是；0：否
     */
    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }

    /**
     * Get 排序号，默认1，降序排序
     * @return sort 排序号，默认1，降序排序
     */
    public Integer getSort() {
        return sort;
    }

    /**
     * Set 排序号，默认1，降序排序
     * @param sort 排序号，默认1，降序排序
     */
    public void setSort(Integer sort) {
        this.sort = sort;
    }

    /**
     * Get 班级id，默认0，代表没有
     * @return class_id 班级id，默认0，代表没有
     */
    public Integer getClassId() {
        return classId;
    }

    /**
     * Set 班级id，默认0，代表没有
     * @param classId 班级id，默认0，代表没有
     */
    public void setClassId(Integer classId) {
        this.classId = classId;
    }

    /**
     * Get 操作者
     * @return operator 操作者
     */
    public String getOperator() {
        return operator;
    }

    /**
     * Set 操作者
     * @param operator 操作者
     */
    public void setOperator(String operator) {
        this.operator = operator == null ? null : operator.trim();
    }

    /**
     * Get 操作时间
     * @return operator_time 操作时间
     */
    public Date getOperatorTime() {
        return operatorTime;
    }

    /**
     * Set 操作时间
     * @param operatorTime 操作时间
     */
    public void setOperatorTime(Date operatorTime) {
        this.operatorTime = operatorTime;
    }
}